// 导航守卫
import router from './router'
import store from './store'

router.beforeEach(async(to, from, next) => {
  const url = to.path
  const token = store.getters.token
  const writelist = ['/login', '/404']
  // 如果登录状态而且跳转到登陆页面，就跳转到主页
  if (token && url === '/login') {
    next('/')
  }
  // 如果登录状态,则随便跳转
  if (token && url !== '/login') {
    // 只有有登录状态时,才需要去获取数据
    // 判断,没有的时候在取值
    // 由于store.state.user.userInfo默认为空对象,取反都为true,所以判断里面有没有username
    if (!store.getters.username) {
      // 跳转其他页面的时候,触发action函数,取值
      await store.dispatch('user/getuserInfo')
      // 只有当获取到数据时,才调用函数,查看能进入的页面
      // 调用vuex定义的封装好的过滤处理函数
      const menus = store.state.user.userInfo.roles.menus
      // 获取到它的返回值
      const routes = await store.dispatch('permission/filterPerm', menus)
      // 路由系统,有一个函数叫 router.addRoutes 可以追加路由配置
      // 使得你通过url访问具体的页面
      console.log(28, menus)
      // 把404页面放到追加路由后面
      router.addRoutes([...routes, { path: '*', redirect: '/404', hidden: true }])
      // 跳转到非静态会出现白屏
      // 解决方法:等到路由全部追加完毕后,再加载一次当前进入的页面
      next(to.path)
      // 不能存在两个return
      return
    }
    next()
  }
  // 如果在白名单,没有登录就直接跳转
  if (!token && writelist.indexOf(to.path) !== -1) {
    next()
  }

  // 如果不在白名单,就直接跳转登录页
  if (!token && writelist.indexOf(to.path) === -1) {
    next('/login')
  }
})
